1. Field of the Invention
The present invention relates generally to computer processing and, in particular, to tessellation techniques.
2. Description of the Background Art
As graphics processing computational power has dramatically increased in recent years, many software developers have taken advantage of these capabilities to develop photo-realistic applications. These applications tax modern system resources to the limit, requiring significant memory space to buffer vertex information defining three-dimensional (3D) models and their texture data, as well as graphics processing unit (GPU) clock cycles for their manipulation.
Defining realistic 3D models using patch data (e.g., a collection of two-dimensional (2D) polygons, typically triangles) generally requires a large number of such patches. Such patches, in addition to graphics, are relevant to a number of other areas of computer processing. These may include, for example, finite element analysis and computational fluid dynamics. A complex model defined using polygons will typically be more accurately represented the more polygons, and their corresponding vertices, that are used.
For example, while a 3D artist can readily make a very realistic model using many vertices, actually rendering such a complex design can exhaust processing resources. This is acceptable in certain applications (e.g., 3D movie development) where rendering time is sacrificed for the benefit of realism. However, this tradeoff is unacceptable in other applications, such as real-time rendering (e.g., video games).
Having a large number of vertices makes real-time manipulation of a model very challenging. Vertex shaders, which perform operations on a per-vertex basis (e.g., application of a transform matrix), quickly become a computational bottleneck with too many vertices to operate on.
Tessellation is a technique by which a simple model with fewer polygons (e.g., triangles, points, lines) is reconstituted using a larger set of objects that are each smaller in size. For example, for a triangle having three vertices, a new vertex in the center of the triangle can be introduced. Then, new edges connecting the existing vertices can be added to create three new triangles. These new objects can then be manipulated to add detail that could not have been rendered by the previous smaller set of objects.
With the introduction of Direct3D® 11 by Microsoft® Corporation of Redmond, Wash., tessellation became a standard function of the render pipeline. Tessellation is implemented using three new stages: a hull shader stage, a tessellation stage, and a domain shader stage.
The hull shader stage produces a geometry patch for each input patch (e.g., a quad, triangle, or line). The tessellator stage uses the geometry patch to create smaller polygons (e.g., triangles, points, lines) that are interconnected within the geometry patch. The domain shader stage then calculates vertex positions (i.e., absolute positions) for each newly-generated vertex. Polygons (which include both lines and points) are also frequently referred to as primitives and the terms will be used interchangeably herein.
While this concept allows software developers to create simpler, less computationally-intensive models that nevertheless result in realistic visualizations, several challenges remain. Although the hull shader and domain shader stages are programmable in existing designs, the tessellation stage is fixed in hardware. Moreover, the tessellation techniques applied by the fixed tessellation stage are highly serial in operation, requiring multiple processor clock cycles for the tessellation of each input patch (typically one clock cycle per new object created).
Accordingly, what is desired is a replacement tessellation stage that is flexible and more efficient.